<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

/**
@ingroup CP_ADMIN
@nosubgrouping
@brief Module d'administration

Gère l'affichage d'un module d'administration et le
traitement des formulaires associés à ce module.

*/

class cpModuleAdmin extends cpMessages
{
	
	
	
	
	
	protected $core;
	
	protected $titreModule;
	protected $boutonsAction = array();
	protected $prev = array();
	
	protected $actionsAutorisees = array();
	
	protected $css;
	protected $javascript;
	
	
	
	
	
	/// @name Initialisation
	//@{
	
	
	/**
	Initialise une instance de cpModuleAdmin
	
	@param	core		<b>cpCore</b>		Référence à cpCore
	*/
	public function __construct($core)
	{
		$this->core =& $core;
	}
	//@}
	
	
	
	
	
	/// @name Propriétés
	//@{
	
	
	/**
	Retourne le titre du module d'administration.
	
	@return	<b>string</b>
	*/
	public function getTitreModule()
	{
		return $this->titreModule;
	}
	
	
	/**
	Définit le titre du module d'administration.
	
	@param	titreModule		<b>string</b>		Titre du module d'administration
	*/
	public function setTitreModule($titreModule)
	{
		$this->titreModule = $titreModule;
	}
	
	
	/**
	Retourne les boutons d'action du module d'administration.
	
	@return	<b>array</b>
	*/
	public function getBoutonsAction()
	{
		return $this->boutonsAction;
	}
	
	
	/**
	Ajoute un bouton d'action.
	
	@param	nom		<b>string</b>		Nom du bouton d'action
	@param	lien	<b>string</b>		Lien affecté au bouton d'action ('#' pour ne rien affecter)
	@param	id		<b>string</b>		Identifiant du bouton d'action (à utiliser pour affecter des actions javascript)
	*/
	public function ajouterBoutonAction($nom, $lien, $id=NULL)
	{
		$this->boutonsAction[] = array(
			CP_BOUTON_ACTION_NOM => $nom,
			CP_BOUTON_ACTION_LIEN => $lien,
			CP_BOUTON_ACTION_ID => $id
		);
	}
	
	
	/**
	Retourne le module d'administration affecté au lien "Remonter".
	
	@return	<b>array</b>
	*/
	public function getPrev()
	{
		return $this->prev;
	}
	
	
	/**
	Définit le module d'administration affecté au lien "Remonter".
	
	@param	id		<b>string</b>		Identifiant du module d'administration
	@param	titre	<b>string</b>		Titre du lien (par défaut: "Remonter")
	*/
	public function setPrev($id, $titre=null)
	{
		$titre = empty($titre) ? __('Remonter') : $titre;
		$this->prev = array($id, $titre);
	}
	
	
	/**
	Retourne les identifiants des feuilles de style à charger
	séparés par des virgules.
	
	@return	<b>string</b>
	*/
	public function getCSS()
	{
		return $this->css;
	}
	
	
	/**
	Définit les identifiants des feuilles de style à charger.
	
	@param	css		<b>string</b>		Identifiants des feuilles de style à charger
										séparés par des virgules.
	*/
	public function setCSS($css)
	{
		$this->css = $css;
	}
	
	
	/**
	Retourne les identifiants des scripts à charger
	séparés par des virgules.
	
	@return	<b>string</b>
	*/
	public function getJavascript()
	{
		return $this->javascript;
	}
	
	
	/**
	Définit les identifiants des scripts à charger.
	
	@param	javascript	<b>string</b>	Identifiants des scripts à charger
										séparés par des virgules.
	*/
	public function setJavascript($javascript)
	{
		$this->javascript = $javascript;
	}
	//@}
	
	
	
	
	
	/// @name Interface du module
	//@{
	
	
	/**
	Retourne le code HTML de l'interface.
	
	Cette méthode doit être redéfinie dans la classe du
	module d'administration.
	
	@return	<b>string</b>
	*/
	public function interfaceModule()
	{
		return '';
	}

	
	/**
	Retourne le code HTML à placer dans l'en-tête de la
	page entre les balises <head></head>.
	
	Cette méthode peut être redéfinie dans la classe du
	module d'administration. Sinon, elle retourne une
	chaîne vide.
	
	@return	<b>string</b>
	*/
	public function head()
	{
		return '';
	}
	//@}
	
	
	
	
	
	/// @name Formulaires
	//@{
	
	
	/**
	Définit les actions de formulaire autorisées.
	
	Pour chaque action autorisée, le module d'administration
	doit posséder une méthode nommée 'action_<nom de l'action>'.
	
	@param	action1	<b>string</b>	Identifiant d'une action de formulaire autorisée
	@param	action2	<b>string</b>	Identifiant d'une action de formulaire autorisée
	@param	action3	<b>string</b>	Identifiant d'une action de formulaire autorisée
	@param	actionn	<b>string</b>	...
	*/
	public function setActionsAutorisees($actionsAutorisees)
	{
		if(!is_array($actionsAutorisees)) {
			$actionsAutorisees = func_get_args();
		}
		$this->actionsAutorisees = $actionsAutorisees;
	}
	
	
	/** @ignore */
	public function traiterFormulaire()
	{
		if(!empty($_POST['action']) && in_array($_POST['action'], $this->actionsAutorisees))
		{
			// Vérification du nonce
			if($this->core->verifierNonce($_POST['action'], $_POST['nonce'])) {

				$this->core->detruireNonce($_POST['action']);

				$nomFonction = 'action_'.$_POST['action'];
				
				try {
					$this->$nomFonction($_POST);
				} catch (cpErreur $e) {
					if($e->getCode() >= 100 && $e->getCode() <= 199) {
						$this->ajouterErreurFormulaire($e->getChamp(), $e->getMessage());
					} else {
						$this->erreurGenerale($e);
					}
				}				
			}
		}
	}
	//@}

	
}

?>